package com.yupi.yangoj.judge.codesandbox;

import com.yupi.yangoj.judge.codesandbox.impl.ExampleCodeSandBoxImpl;
import com.yupi.yangoj.judge.codesandbox.impl.RemoteCodeSandBoxImpl;
import com.yupi.yangoj.judge.codesandbox.impl.ThirdPartyCodeSandBoxImpl;

/**
 * 静态工厂设计模式：用于创建代码沙箱接口的示例对象（返回三个中的一个）
 */
public class CodeSandBoxFactory {

    /**
     * 创建具体的代码沙箱实例
     * @param type
     * @return
     */
    public static CodeSandBox newInstance(String type){
        switch (type){
            case "example":
                //这里创建的是CodeSandBox的代理对象，里面编写了一些增强方法（打印日志）
                return new CodeSandBoxProxy(new ExampleCodeSandBoxImpl());
            case "remote":
                return new CodeSandBoxProxy(new RemoteCodeSandBoxImpl());
            case "third":
                return new CodeSandBoxProxy(new ThirdPartyCodeSandBoxImpl());
            default:
                return new CodeSandBoxProxy(new ExampleCodeSandBoxImpl());
        }
    }

}
